IAMユーザにアクセスキーの発行・削除権限を与えて、動作を確認してみる
AWSアクセスキーは、90日のローテーションが推奨されています。AWS Security Hubでもローテーションのルールがあります。
何らかのSaaSで使っているアクセスキーは、人間がローテーションせざるを得ないことが多いと思います。 しかし、自分たちで開発しているソフトウェアで利用している場合は、AWSアクセスキーのローテーションを自動化できるかも?と思ったので、動作を確認してみました。
AWSアクセスキーのローテーション自動化を推奨するものではありません。組織のルール、付与されている権限の内容、扱っている情報、などによって判断してください。
おすすめの方
- AWSアクセスキーをプログラム等でローテーションしたい方
IAMユーザを作成する
アクセスキーの作成・削除の権限を付与します。また、実験用にS3バケットの一覧取得の権限も付与します。
CloudFormationテンプレート
AWSTemplateFormatVersion: 2010-09-09 Description: IAM User Sample Resources: User: Type: AWS::IAM::User Properties: UserName: accesskey-rotate-sample-user UserPoricy: Type: AWS::IAM::Policy Properties: PolicyName: accesskey-rotate-sample-user-policy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - s3:ListBuckets - s3:ListAllMyBuckets Resource: "*" - Effect: Allow Action: - iam:CreateAccessKey - iam:DeleteAccessKey Resource: !GetAtt User.Arn Users: - !Ref User
デプロイ
デプロイします。
aws cloudformation deploy \ --template-file iam.yaml \ --stack-name IAM-User-Sample-Stack \ --capabilities CAPABILITY_NAMED_IAM
AWSアクセスキーの取得
アクセスキーを取得します。
aws iam create-access-key \ --user-name accesskey-rotate-sample-user
動作確認
さきほど取得したアクセスキーを環境変数に設定します。
export AWS_ACCESS_KEY_ID=aaa export AWS_SECRET_ACCESS_KEY=bbbb
S3バケットの一覧を取得できることを確認します。
aws s3 ls
新しいアクセスキーを発行したあと、このアクセスキーが使えなくなることを確認します。
IAMユーザのアクセスキーをローテーションする
新しいアクセスキーを取得する
新しいアクセスキーを取得します。
aws iam create-access-key \ --user-name accesskey-rotate-sample-user
新しいアクセスキーが使えることを確認する
新しいアクセスキーを環境変数に設定します。
export AWS_ACCESS_KEY_ID=xxx export AWS_SECRET_ACCESS_KEY=yyy
新しいアクセスキーでS3バケットの一覧が取得できることを確認します。
aws s3 ls
古いアクセスキーを削除する
古いアクセスキーを削除します。これ自体は、新しいアクセスキーで実行します(さきほど新しいアクセスキーに切り替えています)。
aws iam delete-access-key \ --access-key-id aaa \ --user-name accesskey-rotate-sample-user
古いアクセスキーが使えないことを確認する
最初に取得したアクセスキーに切り替えます。
export AWS_ACCESS_KEY_ID=aaa export AWS_SECRET_ACCESS_KEY=bbb
無事に使えなくなっています。
aws s3 ls An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.
さいごに
IAMユーザのアクセスキー更新をAWS CLIで試してみました。 AWS SDKでも可能なので、ユースケースによっては、アクセスキーのローテーションを自動化できそうです。